﻿using System;
using System.Collections.Generic;
using System.Text;
using Entidad;
using System.Data;
using Persistencias;
using System.Data.SqlClient;

namespace Persistencia
{
    public class PerAlumno : IPersistencia
    {
        public PerAlumno() { }
        public int InsertarID(IEntidad entidad)
        {
            AccesoaDatos d = new AccesoaDatos();

            try
            {
                EntAlumno Alumno = (EntAlumno)entidad;



                d.CrearParametro("@nombre", Alumno.Nombre, SqlDbType.NVarChar);
                d.CrearParametro("@FechaDeNacimiento", Alumno.FechaDeNacimiento, SqlDbType.DateTime);
                d.CrearParametro("@Direccion", Alumno.Direccion, SqlDbType.NVarChar);
                d.CrearParametro("@Telefono", Alumno.Telefono, SqlDbType.NVarChar);
                d.CrearParametro("@NombrePadre", Alumno.NombrePadre, SqlDbType.NVarChar);
                d.CrearParametro("@PorcentajeVeca", Alumno.PorcentajeVeca, SqlDbType.Int);
                d.CrearParametro("@Categoria", Alumno.IdCategoria, SqlDbType.Int);
                int IdAlumno = 0;
                DataTable _tabla = d.EjecutaSelect("InsertarAlumno");
                foreach (DataRow _row in _tabla.Rows)
                {
                    IdAlumno = Convert.ToInt32(_row["Id"]);
                }
                return IdAlumno;
            }
            catch (Exception ex)
            {
                System.ApplicationException excepcion = new System.ApplicationException(ex.Message, ex);
                throw excepcion;
            }
        }
        public void Insertar(IEntidad entidad)
        {
            AccesoaDatos d = new AccesoaDatos();
           
            try
            {
                EntAlumno Alumno = (EntAlumno)entidad;
               
                
                
                d.CrearParametro("@nombre", Alumno.Nombre, SqlDbType.NVarChar);
                d.CrearParametro("@FechaDeNacimiento", Alumno.FechaDeNacimiento, SqlDbType.DateTime);
                d.CrearParametro("@Direccion", Alumno.Direccion, SqlDbType.NVarChar);
                d.CrearParametro("@Telefono", Alumno.Telefono, SqlDbType.NVarChar);
                d.CrearParametro("@NombrePadre", Alumno.NombrePadre, SqlDbType.NVarChar);
                d.CrearParametro("@PorcentajeVeca", Alumno.PorcentajeVeca, SqlDbType.Int);
                d.CrearParametro("@Categoria", Alumno.IdCategoria, SqlDbType.Int);
                d.EjecutaSentencia("InsertarAlumno");

            }
            catch (Exception ex)
            {
                System.ApplicationException excepcion = new System.ApplicationException(ex.Message, ex);
                throw excepcion;
            }
        }

        public void Eliminar(int Id)
        {
            try
            {
                AccesoaDatos d = new AccesoaDatos();

                d.CrearParametro("@IdAlumno", Id, SqlDbType.Int);
                d.EjecutaSentencia("sp_DeleteAlumno");


            }
            catch (Exception ex)
            {
                System.ApplicationException excepcion = new System.ApplicationException(ex.Message, ex);
                throw ex;
            }
        }

        public void Modificar(IEntidad entidad)
        {
            AccesoaDatos d = new AccesoaDatos();
            try
            {
                EntAlumno Alumno = (EntAlumno)entidad;

                d.CrearParametro("@IdAlumno", Alumno.IdAlumno, SqlDbType.Int);
                d.CrearParametro("@nombre", Alumno.Nombre, SqlDbType.NVarChar);
                d.CrearParametro("@FechaDeNacimiento", Alumno.FechaDeNacimiento, SqlDbType.DateTime);
                d.CrearParametro("@Direccion", Alumno.Direccion, SqlDbType.NVarChar);
                d.CrearParametro("@Telefono", Alumno.Telefono, SqlDbType.NVarChar);
                d.CrearParametro("@NombrePadre", Alumno.NombrePadre, SqlDbType.NVarChar);
                d.CrearParametro("@PorcentajeVeca", Alumno.PorcentajeVeca, SqlDbType.Int);
                d.CrearParametro("@Categoria", Alumno.IdCategoria, SqlDbType.VarChar);

                d.EjecutaSentencia("ModificarAlumno");

            }
            catch (Exception ex)
            {
                System.ApplicationException excepcion = new System.ApplicationException(ex.Message, ex);
                throw excepcion;
            }
        }

        public IEntidad Obtener(String Id)
        {
            try
            {
                EntAlumno Alumno = new EntAlumno();
                AccesoaDatos d = new AccesoaDatos();
                d.CrearParametro("@Id", Id, SqlDbType.Int);
                DataTable _tabla = d.EjecutaSelect("ObtenerAlumnoPorId");
                foreach (DataRow _row in _tabla.Rows)
                {
                   

                    Alumno.IdAlumno = Convert.ToInt32(_row["IdAlumno"]);
                    Alumno.Nombre = _row["Nombre"].ToString();
                    Alumno.FechaDeNacimiento = Convert.ToDateTime(_row["FechaDeNacimiento"]);
                    Alumno.Direccion = _row["Direccion"].ToString();
                    Alumno.Telefono = _row["Telefono"].ToString();
                    Alumno.NombrePadre = _row["NombrePadre"].ToString();
                    Alumno.PorcentajeVeca = Convert.ToInt32(_row["PorcentajeVeca"]);
                    Alumno.FechaRegistro = Convert.ToDateTime(_row["fechaRegistro"]);
                   

                }
                return Alumno;
            }
            catch (Exception ex)
            {
                System.ApplicationException excepcion = new System.ApplicationException(ex.Message, ex);
                throw excepcion;
            }
        }

        public List<IEntidad> BuscarAlumno(String Nombre)
        {
            try
            {
                List<IEntidad> DatosAlumno = new List<IEntidad>();
                AccesoaDatos d = new AccesoaDatos();
                d.CrearParametro("@Nombre", Nombre, SqlDbType.NVarChar);
                DataTable _tabla = d.EjecutaSelect("BuscarPorNombre");
                foreach (DataRow _row in _tabla.Rows)
                {
                    EntAlumno Alumno = new EntAlumno();

                    Alumno.IdAlumno = Convert.ToInt32(_row["IdAlumno"]);
                    Alumno.IdCategoria = Convert.ToInt32(_row["IdCategoria"]);
                    Alumno.Nombre = _row["Nombre"].ToString();
                    Alumno.FechaDeNacimiento = Convert.ToDateTime(_row["FechaDeNacimiento"]);
                    Alumno.Direccion = _row["Direccion"].ToString();
                    Alumno.Telefono = _row["Telefono"].ToString();
                    Alumno.NombrePadre = _row["NombrePadre"].ToString();
                    Alumno.PorcentajeVeca = Convert.ToInt32(_row["PorcentajeVeca"]);
                    Alumno.FechaRegistro = Convert.ToDateTime(_row["fechaRegistro"]);
                    Alumno.Adeudo = _row["Adeudo"].ToString();
                    Alumno.CategoriaActual = _row["Categoria"].ToString();



                    DatosAlumno.Add(Alumno);
                }
                return DatosAlumno;
            }
            catch (Exception ex)
            {
                System.ApplicationException excepcion = new System.ApplicationException(ex.Message, ex);
                throw excepcion;
            }
        }

        public List<IEntidad> ObtenerTodos()
        {
            try
            {
                
                AccesoaDatos d = new AccesoaDatos();
                List<IEntidad> DatosAlumno = new List<IEntidad>();
                DataTable _tabla = d.EjecutaSelect("ObtenerTodosAlumno");
                foreach (DataRow _row in _tabla.Rows)
                {
                    EntAlumno Alumno = new EntAlumno();


                    PerCategoria PerCategoria = new PerCategoria();
                    Alumno.IdAlumno = Convert.ToInt32(_row["IdAlumno"]);
                    Alumno.IdCategoria = Convert.ToInt32(_row["IdCategoria"]);
                    Alumno.Nombre = _row["Nombre"].ToString();
                    Alumno.FechaDeNacimiento = Convert.ToDateTime( _row["FechaDeNacimiento"]);
                    Alumno.Direccion = _row["Direccion"].ToString();
                    Alumno.Telefono = _row["Telefono"].ToString();
                    Alumno.Habilitado = bool.Parse(_row["Habilitado"].ToString());
                    Alumno.NombrePadre = _row["NombrePadre"].ToString();
                    Alumno.PorcentajeVeca = Convert.ToInt32(_row["PorcentajeVeca"]);
                    Alumno.FechaRegistro = Convert.ToDateTime(_row["fechaRegistro"]);
                    Alumno.Adeudo = _row["Adeudo"].ToString();
                    Alumno.CategoriaActual = _row["Categoria"].ToString();

                    DatosAlumno.Add(Alumno);
                }
                return DatosAlumno;
            }
            catch (SqlException ex)
            {
                System.ApplicationException excepcion = new System.ApplicationException(ex.Message, ex);
                throw excepcion;
            }
        }

      

        public List<IEntidad> ObtenerAlumnosPorCategoria(string ID)
        {
            try
            {

                AccesoaDatos d = new AccesoaDatos();
                List<IEntidad> DatosAlumno = new List<IEntidad>();
                d.CrearParametro("@IdCategoria", ID, SqlDbType.Int);
                DataTable _tabla = d.EjecutaSelect("ObtenerAlumnosPorCategoria");
                foreach (DataRow _row in _tabla.Rows)
                {
                    EntAlumno Alumno = new EntAlumno();


                    PerCategoria PerCategoria = new PerCategoria();
                    Alumno.IdAlumno = Convert.ToInt32(_row["IdAlumno"]);
                    Alumno.Nombre = _row["Nombre"].ToString();
                    Alumno.FechaDeNacimiento = Convert.ToDateTime(_row["FechaDeNacimiento"]);
                    Alumno.Direccion = _row["Direccion"].ToString();
                    Alumno.Telefono = _row["Telefono"].ToString();
                    Alumno.NombrePadre = _row["NombrePadre"].ToString();
                    Alumno.EntCategoria = (EntCategoria)PerCategoria.Obtener(_row["IdCategoria"].ToString());
                    Alumno.PorcentajeVeca = Convert.ToInt32(_row["PorcentajeVeca"]);
                    Alumno.FechaRegistro = Convert.ToDateTime(_row["fechaRegistro"]);
                    Alumno.Adeudo = _row["Adeudo"].ToString();


                    DatosAlumno.Add(Alumno);
                }
                return DatosAlumno;
            }
            catch (SqlException ex)
            {
                System.ApplicationException excepcion = new System.ApplicationException(ex.Message, ex);
                throw excepcion;
            }
        }



     



        public List<IEntidad> ObtenerPagosPorFechas(DateTime Inicio, DateTime Fin)
        {
            try
            {

                AccesoaDatos d = new AccesoaDatos();
                List<IEntidad> Mensualidades = new List<IEntidad>();
                d.CrearParametro("@Inicio", Inicio, SqlDbType.DateTime);
                d.CrearParametro("@Fin", Fin.AddHours(23), SqlDbType.DateTime);
                DataTable _tabla = d.EjecutaSelect("ObtenerPagosPorCategoria");
                foreach (DataRow _row in _tabla.Rows)
                {
                    EntMensualidad Mensualidad = new EntMensualidad();




                    Mensualidad.MontoPag = "0";
                    Mensualidad.RecargoPag = "0";
                    Mensualidad.BecaPag = "0";

                    if (_row["MontoPag"].ToString() != "")
                    Mensualidad.MontoPag = _row["MontoPag"].ToString();
                    
                    if (_row["RecargoPag"].ToString() != "")
                    Mensualidad.RecargoPag = _row["RecargoPag"].ToString();
                   
                    if (_row["BecaPag"].ToString() != "")
                        Mensualidad.BecaPag = _row["BecaPag"].ToString();

                    if (_row["PagoOportunoPag"].ToString() != "")
                        Mensualidad.PagoOportunoPag = _row["PagoOportunoPag"].ToString();
                    
                    Mensualidad.nombre = _row["nombre"].ToString();


                    Mensualidad.Descripcion = _row["Descripcion"].ToString();
                    Mensualidad.FechaPago = DateTime.Parse(_row["FechadePago"].ToString());
                    Mensualidad.UsuarioSist.NombreCobrador = _row["NombreCobrador"].ToString();

                    Mensualidades.Add(Mensualidad);
                }
                return Mensualidades;
            }
            catch (SqlException ex)
            {
                System.ApplicationException excepcion = new System.ApplicationException(ex.Message, ex);
                throw excepcion;
            }
        }
    }
}
